package com.sunreal.paygateway.sys.util;

import java.text.DateFormat;
import java.util.Date;

import javax.servlet.http.HttpSession;

import com.fasterxml.jackson.databind.deser.std.DateDeserializers;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

/**
 * 功能描述：SessionUtil 用于处理是否使用mongodb作为session的缓存
 *
 * @Author 彭广
 * @Date 2019/1/18
 */
public class SessionUtil {
    //设置是否开启Mongo存储session 如果为true 从mongo中处理，false直接返回session的内容本身
    static Boolean DOMONGOTRACE = true;

    public static <T> T getMongoSession(HttpSession session, Class<?> t) {
        return getMongoSession(session, t, null);
    }

    /**
     * @param session   - httpsession
     * @param t         - xxx.class
     * @param className - 注意全字母大写,session的key理论上装载以后就要全部大写
     * @return
     */
    @SuppressWarnings("unchecked")
    public static <T> T getMongoSession(HttpSession session, Class<?> t, String className) {
        className = className == null ? t.getSimpleName().toUpperCase() : className;
        if (DOMONGOTRACE) {
            Gson gson = new GsonBuilder().registerTypeAdapter(Date.class, new DateDeserializers.DateDeserializer()).setDateFormat(DateFormat.LONG).create();
            return (T) gson.fromJson(gson.toJson(session.getAttribute(className)), t);
        } else {
            return (T) session.getAttribute(className);
        }
    }
}
